<?php

abstract class Source {

    protected $sInput;

    public static function create(
        $sInput,
        $sType = null
        ) {

        switch($sType) {

            case "request":
                return new Source_Request($sInput);
            break;

            case "holder":
                return new Source_Holder($sInput);
            break;

            case null:
                return new Source_Null($sInput);
            break;

            default:
                throw new Exception_SourceTypeUnsupported($sType);
            break;

        }

    }

    protected function __construct($sInput) {

        $this->sInput = $sInput;

    }

    abstract public function get();

}

?>